package com.jevons.muffin.util;

import android.content.SharedPreferences;
import android.text.TextUtils;

import com.jevons.muffin.BaseApplication;
import com.jevons.muffin.encrypt.AESCoder;


/**
 * SharedPreferences数据保存
 * <p/>
 * create at:  2016/4/28
 */
public class SysSharePres {

    // SharedPreferences对象
    private SharedPreferences mSharePres = BaseApplication.getContext().getSharedPreferences("system_share", 0);

    private static class SysSharePresHolder {
        static final SysSharePres INSTANCE = new SysSharePres();
    }

    /**
     * 获取SharedPreferences对象
     *
     * @return
     */
    public static SysSharePres getInstance() {
        return SysSharePresHolder.INSTANCE;
    }

    /**
     * boolean--获取数据
     *
     * @param key
     * @return
     */
    public Boolean getBoolean(String key) {
        return getBoolean(key, false);
    }

    /**
     * boolean--获取数据
     *
     * @param key
     * @param defaultValue 默认的值
     * @return
     */
    public Boolean getBoolean(String key, Boolean defaultValue) {
        return mSharePres.getBoolean(key, defaultValue);
    }

    /**
     * boolean--保存数据
     *
     * @param key
     * @param value
     */
    public void putBoolean(String key, Boolean value) {
        mSharePres.edit().putBoolean(key, value).commit();
    }

    /**
     * float--根据key获取数据
     *
     * @param key
     * @return
     */
    public float getFloat(String key) {
        return getFloat(key, 0.0F);
    }

    /**
     * float--根据key获取数据
     *
     * @param key
     * @param defaultValue 默认的值
     * @return
     */
    public float getFloat(String key, float defaultValue) {
        return this.mSharePres.getFloat(key, defaultValue);
    }

    /**
     * float-保存数据
     *
     * @param key
     * @param value
     */
    public void putFloat(String key, float value) {
        mSharePres.edit().putFloat(key, value).commit();
    }

    /**
     * int--获取数据
     *
     * @param key
     * @return
     */
    public int getInt(String key) {
        return getInt(key, 0);
    }

    /**
     * int--根据key获取数据
     *
     * @param key
     * @param defaultValue 默认的值
     * @return
     */
    public int getInt(String key, int defaultValue) {
        return this.mSharePres.getInt(key, defaultValue);
    }

    /**
     * int--保存数据
     *
     * @param key
     * @param value
     */
    public void putInt(String key, int value) {
        this.mSharePres.edit().putInt(key, value).commit();
    }

    /**
     * long--根据key获取数据
     *
     * @param key
     * @return
     */
    public long getLong(String key) {
        return getLong(key, 0L);
    }

    /**
     * long--根据key获取数据
     *
     * @param key
     * @param defaultValue 默认的值
     * @return
     */
    public long getLong(String key, long defaultValue) {
        return this.mSharePres.getLong(key, defaultValue);
    }

    /**
     * long--保存数据
     *
     * @param key
     * @return
     */
    public void putLong(String key, long value) {
        this.mSharePres.edit().putLong(key, value).commit();
    }

    /**
     * String --根据key获取数据
     *
     * @param key
     * @return
     */
    public String getString(String key) {
        return getString(key, "");
    }

    /**
     * String--根据key获取数据
     *
     * @param key
     * @param defaultValue 默认的值
     * @return
     */
    public String getString(String key, String defaultValue) {
        String str = mSharePres.getString(key, defaultValue);
        if (TextUtils.isEmpty(str)) {
            return str;
        }
        return str;
    }

    /**
     * String--根据key获取数据
     * @param key
     * @param encrypt   是否解密
     * @return
     */
    public String getString(String key, boolean encrypt) {
        String str = getString(key);
        if (TextUtils.isEmpty(str)) {
            return str;
        }
        // 如果Config.properties中的加密开关是打开的，则需解密数据
        if (encrypt) {
            str = AESCoder.decrypt(AESCoder.DEFAULT_PASSWORD, str);
        }
        return str;
    }

    /**
     * String--保存数据
     *
     * @param key
     * @param value
     */
    public void putString(String key, String value) {
        mSharePres.edit().putString(key, value).commit();
    }

    /**
     * String--保存数据
     *
     * @param key
     * @param value
     * @param encrypt 是否加密
     */
    public void putString(String key, String value, boolean encrypt) {
        //如果配置文件中的加密开关打开的话则加密保存数据
        if (encrypt) {
            if (!TextUtils.isEmpty(value)) {
                value = AESCoder.encrypt(AESCoder.DEFAULT_PASSWORD, value);
            }
        }
        this.mSharePres.edit().putString(key, value).commit();
    }

    /**
     * 移除保存的数据
     *
     * @param key
     */
    public void remove(String key) {
        this.mSharePres.edit().remove(key).commit();
    }

}
